Flutter 2.0 来了!成为跨平台开发终极之选
(给安卓开发精选加星标)
转自:InfoQ 核子可乐、Tina
下一代 Flutter 专为 Web、移动与台式机环境构建而成。
最近,谷歌正式发布 Flutter 的 2.0 版本。
作为 Flutter 的一次重大版本升级,Flutter 2 将帮助开发人员立足任意平台创建起美观、快速且能够轻松移植的应用程序。在 Flutter2 的支持下,用户可以使用相同的代码库将原生应用程序发布至 iOS、Android、Windows、macOS 以及 Linux 五大系统阵营之上。此外,Flutter 2 还能够完美契合 Chrome、Firefox、Safari 以及 Edge 等网络浏览器,甚至可以被嵌入至汽车、电视与智能家居当中,借此带来最普遍、最具便携性的计算体验。
1、专为 Web、移动与台式机环境构建
在移动互联网时代,Android 和 iOS 两大阵营长期共存,再加上体系成熟的 Web 前端技术,导致出现同一个应用需多端重复开发的人力成本问题。对于一个大型企业而言,要想让自己的服务覆盖所有客户,必须反复多次构建同一款应用程序。这种重复还缺乏良好的并行性——他们不会构建多种计费系统或者多种工资平台。整个过程涉及巨大的浪费,而且往往会导致各种二阶问题:如何将多个应用同时迁移至多个平台,要求各个开发团队只能以最慢的速度推进以实现彼此匹配等等。
针对跨平台开发问题,当下还没有比较完美的解决方案,这也导致框架层出不穷:小程序(WebView)、React Native 、Weex、Kotlin Native 等等。同时它们又都存在一定的缺陷,比如小程序(WebView)渲染耗时过长,白屏率会影响转化收益,能实现的功能非常受限;再比如 React Native 的性能不足、问题排除难、维护成本高等。
2018 年 12 月 5 日,谷歌公开发布 Flutter 1.0 版本。
Flutter 通过自底向上自研框架来尽可能减少平台差异,并且 “一出生”就以“UI 漂亮、像素级可控、性能流畅、可媲美原生性能”等特点吸引广大开发者的眼球,自渲染引擎甚至具备开发游戏的能力。
虽然目标是提供快速且统一的跨平台编码能,但 Flutter 1.0 发布的时候,仅支持 Android 与 iOS 应用。之后两年多,谷歌开始将 Flutter 的支持能力逐步扩展至 Web 应用程序、MacOS、Linux、Windows 乃至嵌入式设备当中。不过之前的支持仅处于早期开发阶段,并未向开发人员全面公开,自然也谈不到为生产级应用程序提供支持。但这一切正随着 2.0 版本的落地而有所变化。
Flutter 的 Web 开发工具包自 2019 年以来一直处于测试阶段,此番终于获得了 Android 及 iOS 等环境的同等地位。对于桌面开发人员,谷歌还着手将面向 Windows、MacOS 以及 Linux 的 Flutter 过渡至“稳定”版本。
Flutter 产品经理 Tim Sneath 在采访中表示,“对我们来说,这代表着一个巨大的里程碑。不仅代码本身能够满足严苛的生产质量标准,同时也将软件开发套件真正交付至每一位 Flutter 用户手中。”
在应用程序的设计环节,开发人员需要针对平台上的独特因素做出诸多考量——包括用户与设备之间的交互方式(例如在手机上进行触摸与滑动、在台式机上使用键盘加鼠标)、用户查看内容时匹配的屏幕尺寸、乃至不同平台惯常使用的编程语言等。正因为如此,谷歌需要投入不少精力逐步改进 Flutter 开发套件。
Sneath 表示,“为了达到这个阶段,我们已经付出了大量努力,包括添加国际化支持,例如在 IME 编辑器中支持中文;为桌面支持设计出 TreeView 与 DataTable 等新的功能部件;同时为采用苹果芯片的开发设备提供更好的支持。”
以 Linux 为例,Ubuntu 项目商业化公司 Canonical 透露,Flutter 目前已经成为其默认框架,用于为 Ubuntu 操作系统开发桌面与移动应用程序。去年 7 月,谷歌与 Canonical 已经共同发布公告,宣布 Flutter 将向 Linux 领域扩展,且 Canonical 工程师也将为 Flutter 项目贡献代码。
作为最新扩展的一部分,Canonical 还推出了基于 Flutter 的全新 Ubuntu 安装器应用的早期演示。
Flutter 此次公布的其他重要更新,还包括 Google Mobile Ads SDK 的 beta 测试版。这套测试版之前一直处于早期试水阶段,新版本将为 AdMob 以及 AdManager 提供多种广告格式。谷歌还推出 Flutter 插件更新,全面涵盖 Authentication、Crashlytics、云消息收发以及云存储等多种 Firebase 服务。
2、Dart: Flutter 背后的独门绝技
Flutter 2 拥有灵活的多平台与多设备可移植能力,而这种轻松过渡至 Web、桌面与嵌入式设备的优势,在很大程度上要归功于 Dart——针对多平台开发并进行优化的谷歌编程语言。
在构建应用方面,Dart 提供一套独特的功能组合:
稳健的可移植表现,其编译器能够面向移动与台式机设备生成高性能的英特尔与 ARM 机器码,并为 Web 环境提供经过严格优化的 JavaScript 输出。所有目标皆可使用相同的 Flutter 框架源代码。
支持有状态热重载的迭代开发,充分支持桌面与移动设备,同时提供现代 UI 编程中的异步、并发模式设计提供相应的语言构造。
谷歌级性能水平,可跨越一切平台实现良好性能表现,提供 sound null safety 以保证运行时与开发过程中的 null 约束能力。
从目前来看,还没有哪种语言能够像 Dart 这样将所有功能优势融合起来。也正因为如此,Dart 成为 GitHub 上发展速度最快的语言之一。
Dart 2.12 现已正式发布,也是自 2.0 版本之后我们推出的最大规模发行版,可充分支持 sound null safety。Sound null safety 有望消除 null 引用引发的异常,为开发及运行时提供良好保障,允许开发人员明确指定哪些类型中可以包含 null 值。最重要的是,这项功能并非空降落地:用户可以按自己熟悉的方式将其逐步添加至代码内,而后配合迁移工具实现 null 值保护。
此次更新还包含 FFI 稳定实现,允许用户编写出能够与基于 C 语言的 API 进行互操作的高性能代码;由 Flutter 编写的全新集成化开发者与分析器工具;外加众多性能与体量方面的改进,能够在无需重新编译的前提下进一步实现代码升级。
3、Flutter 生态现状
去年 4 月,谷歌表示 Fluuter 的月度开发者用户已经达到 50 万。近一年之后,谷歌只是提到“采用率仍在不断增长”,但并没有提供任何更新数字。在本次发布中,谷歌强调 Google Play 软件商店中已经存在 15 万种 Flutter 驱动型应用程序。但苹果 App Store 等外部商店拥有自己的统计系统,因此相关数据尚不明确。
Sneath 提到,“有趣的是,我们发现部分应用程序会面向特定移动平台添加 Flutter 应用,之后再将其回滚至其他平台。”
目前,世界各地的客户都在积极尝试使用 Flutter,包括微信、Grab、Yandex Go、Nubank、Sonos、Fastic、Betterment 以及 realtor.com 等高人气应用。在谷歌,同样有 1000 多名工程师正在使用 Dart 与 Flutter 构建应用产品,其中的代表包括 Stadia、Google One 以及 Google Nest Hub。
就在几个月前,Google Pay 刚刚转投 Flutter 的怀抱,借此在生产力与质量方面取得了重大进步。通过统一代码库,项目团队消除了不同平台之间的功能差异,并削减了超过 100 万行代码。Google Pay 还报告称,如今团队工程师们的效率大为提升、技术债务显著减少,发布流程也变得更为统一(例如 iOS 与 Android 上的安全审查与试验)。
另一方面,虽然 Flutter 希望提供快速且统一的跨平台编码能力,但对于体量更大、复杂度更高的企业及应用程序,对于 Flutter 这款相对年轻的框架而言,第三方软件库与软件包的匮乏限制了开发人员的手脚。因此对于大多数企业而言,原生软件开发方法仍然占据主流。
Sneath 提到,“生态系统不可能一夜之间构建完毕,从某些标准来看,Flutter 仍然是个年轻的平台。但我们认为,超过 15000 个软件包的涌现已经代表着 Nubank 与 Realtor.com 等厂商在填补这方面空白上做出的持续努力。我们为这种持续增长感到非常振奋。”
参考链接:
https://developers.googleblog.com/2021/03/announcing-flutter-2.html
https://venturebeat.com/2021/03/03/google-launches-flutter-2-0-to-target-developers-across-all-platforms/amp/
- EOF -
看完本文有收获?请分享给更多人
推荐关注「安卓开发精选」,提升安卓开发技术
点赞和在看就是最大的支持❤️